home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / syslinux / com32 / include / klibc / compiler.h next >
C/C++ Source or Header  |  2005-10-29  |  3KB  |  116 lines

  1. /*
  2.  * klibc/compiler.h
  3.  *
  4.  * Various compiler features
  5.  */
  6.  
  7. #ifndef _KLIBC_COMPILER_H
  8. #define _KLIBC_COMPILER_H
  9.  
  10. #define __user
  11.  
  12. /* Specific calling conventions */
  13. /* __cdecl is used when we want varadic and non-varadic functions to have
  14.    the same binary calling convention. */
  15. #ifdef __i386__
  16. # ifdef __GNUC__
  17. #  define __cdecl __attribute__((cdecl,regparm(0)))
  18. # else
  19.   /* Most other C compilers have __cdecl as a keyword */
  20. # endif
  21. #else
  22. # define __cdecl        /* Meaningless on non-i386 */
  23. #endif
  24.  
  25. /* How to declare a function that *must* be inlined */
  26. #ifdef __GNUC__
  27. # if __GNUC_MAJOR__ >= 3
  28. #  define __must_inline static __inline__ __attribute__((always_inline))
  29. # else
  30. #  define __must_inline extern __inline__
  31. # endif
  32. #else
  33. # define __must_inline inline    /* Just hope this works... */
  34. #endif
  35.  
  36. /* How to declare a function that does not return */
  37. #ifdef __GNUC__
  38. # define __noreturn void __attribute__((noreturn))
  39. #else
  40. # define __noreturn void
  41. #endif
  42.  
  43. /* "const" function:
  44.  
  45.      Many functions do not examine any values except their arguments,
  46.      and have no effects except the return value.  Basically this is
  47.      just slightly more strict class than the `pure' attribute above,
  48.      since function is not allowed to read global memory.
  49.  
  50.      Note that a function that has pointer arguments and examines the
  51.      data pointed to must _not_ be declared `const'.  Likewise, a
  52.      function that calls a non-`const' function usually must not be
  53.      `const'.  It does not make sense for a `const' function to return
  54.      `void'.
  55. */
  56. #ifdef __GNUC__
  57. # define __constfunc __attribute__((const))
  58. #else
  59. # define __constfunc
  60. #endif
  61. #undef __attribute_const__
  62. #define __attribute_const__ __constfunc
  63.  
  64. /* "pure" function:
  65.  
  66.      Many functions have no effects except the return value and their
  67.      return value depends only on the parameters and/or global
  68.      variables.  Such a function can be subject to common subexpression
  69.      elimination and loop optimization just as an arithmetic operator
  70.      would be.  These functions should be declared with the attribute
  71.      `pure'.
  72. */
  73. #ifdef __GNUC__
  74. # define __purefunc __attribute__((pure))
  75. #else
  76. # define __purefunc
  77. #endif
  78. #undef __attribute_pure__
  79. #define __attribute_pure__ __purefunc
  80.  
  81. /* Format attribute */
  82. #ifdef __GNUC__
  83. # define __formatfunc(t,f,a) __attribute__((format(t,f,a)))
  84. #else
  85. # define __formatfunc(t,f,a)
  86. #endif
  87.  
  88. /* malloc() function (returns unaliased pointer) */
  89. #if defined(__GNUC__) && (__GNUC_MAJOR__ >= 3)
  90. # define __mallocfunc __attribute__((malloc))
  91. #else
  92. # define __mallocfunc
  93. #endif
  94.  
  95. /* likely/unlikely */
  96. #if defined(__GNUC__) && (__GNUC_MAJOR__ > 2 || (__GNUC_MAJOR__ == 2 && __GNUC_MINOR__ >= 95))
  97. # define __likely(x)   __builtin_expect((x), 1)
  98. # define __unlikely(x) __builtin_expect((x), 0)
  99. #else
  100. # define __likely(x)   (x)
  101. # define __unlikely(x) (x)
  102. #endif
  103.  
  104. /* Possibly unused function */
  105. #ifdef __GNUC__
  106. # define __unusedfunc    __attribute__((unused))
  107. #else
  108. # define __unusedfunc
  109. #endif
  110.  
  111. /* Constructors and destructors */
  112. #define __constructor    __attribute__((constructor))
  113. #define __destructor    __attribute__((destructor))
  114.  
  115. #endif
  116.